{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分别使用朴素贝叶斯API和其它分类API对scikit中自带的新闻文本数据进行分类操作；比较各种不同分类算法的效果以及执行消耗时间（贝叶斯在文本挖掘中常用）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [GaussianNB 高斯](http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB)\n",
    "- [MultinomialNB 多项式](http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB)\n",
    "- [BernoulliNB 伯努利](http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB)\n",
    "- [TfidfVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from time import time\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "\n",
    "from sklearn.datasets import fetch_20newsgroups # 引入新闻数据数据包\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer #做tfidf编码\n",
    "from sklearn.feature_selection import SelectKBest, chi2 # 卡方检验——特征筛选\n",
    "from sklearn.linear_model import RidgeClassifier\n",
    "from sklearn.svm import LinearSVC,SVC\n",
    "from sklearn.naive_bayes import MultinomialNB, BernoulliNB\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "###  基准模型方法\n",
    "def benchmark(clf,name):\n",
    "    print (u'分类器：', clf)\n",
    "    \n",
    "    ##  设置最优参数，并使用5折交叉验证获取最优参数值\n",
    "    alpha_can = np.logspace(-2, 1, 10)\n",
    "    model = GridSearchCV(clf, param_grid={'alpha': alpha_can}, cv=5)\n",
    "    m = alpha_can.size\n",
    "    \n",
    "    ## 如果模型有一个参数是alpha，进行设置\n",
    "    if hasattr(clf, 'alpha'):\n",
    "        model.set_params(param_grid={'alpha': alpha_can})\n",
    "        m = alpha_can.size\n",
    "    ## 如果模型有一个k近邻的参数，进行设置\n",
    "    if hasattr(clf, 'n_neighbors'):\n",
    "        neighbors_can = np.arange(1, 15)\n",
    "        model.set_params(param_grid={'n_neighbors': neighbors_can})\n",
    "        m = neighbors_can.size\n",
    "    ## LinearSVC最优参数配置\n",
    "    if hasattr(clf, 'C'):\n",
    "        C_can = np.logspace(1, 3, 3)\n",
    "        model.set_params(param_grid={'C':C_can})\n",
    "        m = C_can.size\n",
    "    ## SVM最优参数设置\n",
    "    if hasattr(clf, 'C') & hasattr(clf, 'gamma'):\n",
    "        C_can = np.logspace(1, 3, 3)\n",
    "        gamma_can = np.logspace(-3, 0, 3)\n",
    "        model.set_params(param_grid={'C':C_can, 'gamma':gamma_can})\n",
    "        m = C_can.size * gamma_can.size\n",
    "    ## 设置深度相关参数，决策树\n",
    "    if hasattr(clf, 'max_depth'):\n",
    "        max_depth_can = np.arange(4, 10)\n",
    "        model.set_params(param_grid={'max_depth': max_depth_can})\n",
    "        m = max_depth_can.size\n",
    "    \n",
    "    ## 模型训练\n",
    "    t_start = time()\n",
    "    model.fit(x_train, y_train)\n",
    "    t_end = time()\n",
    "    t_train = (t_end - t_start) / (5*m)\n",
    "    print (u'5折交叉验证的训练时间为：%.3f秒/(5*%d)=%.3f秒' % ((t_end - t_start), m, t_train))\n",
    "    print (u'最优超参数为：', model.best_params_)\n",
    "    \n",
    "    ## 模型预测\n",
    "    t_start = time()\n",
    "    y_hat = model.predict(x_test)\n",
    "    t_end = time()\n",
    "    t_test = t_end - t_start\n",
    "    print (u'测试时间：%.3f秒' % t_test)\n",
    "    \n",
    "    ## 模型效果评估\n",
    "    train_acc = metrics.accuracy_score(y_train, model.predict(x_train))\n",
    "    test_acc = metrics.accuracy_score(y_test, y_hat)\n",
    "    print (u'训练集准确率：%.2f%%' % (100 * train_acc))\n",
    "    print (u'测试集准确率：%.2f%%' % (100 * test_acc))\n",
    "    \n",
    "    ## 返回结果(训练时间耗时，预测数据耗时，训练数据错误率，测试数据错误率, 名称)\n",
    "    return t_train, t_test, 1-train_acc, 1-test_acc, name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## 设置属性防止中文乱码\n",
    "mpl.rcParams['font.sans-serif'] = [u'SimHei']\n",
    "mpl.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始下载/加载数据...\n",
      "完成数据加载过程.耗时:2.765s\n"
     ]
    }
   ],
   "source": [
    "### 数据加载\n",
    "print (u'开始下载/加载数据...')\n",
    "t_start = time()\n",
    "## 不要头部信息\n",
    "remove = ('headers', 'footers', 'quotes')\n",
    "## 只要这四类数据\n",
    "categories = 'alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space'\n",
    "\n",
    "## 分别加载训练数据和测试数据\n",
    "data_train = fetch_20newsgroups(data_home='./datas/',subset='train', categories=categories, shuffle=True, random_state=0, remove=remove)\n",
    "data_test = fetch_20newsgroups(data_home='./datas/',subset='test', categories=categories, shuffle=True, random_state=0, remove=remove)\n",
    "\n",
    "## 完成\n",
    "print (u\"完成数据加载过程.耗时:%.3fs\" % (time() - t_start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据类型： <class 'sklearn.datasets.base.Bunch'>\n",
      "2034文本数量 - 2.428MB (训练数据集)\n",
      "1353文本数量 - 1.800MB (测试数据集)\n",
      "训练集和测试集使用的4个类别的名称：\n",
      "['alt.atheism', 'comp.graphics', 'sci.space', 'talk.religion.misc']\n"
     ]
    }
   ],
   "source": [
    "### 获取加载数据的相关信息\n",
    "# 算下docs大小\n",
    "def size_mb(docs):\n",
    "    return sum(len(s.encode('utf-8')) for s in docs) / 1e6\n",
    "\n",
    "categories = data_train.target_names\n",
    "data_train_size_mb = size_mb(data_train.data)\n",
    "data_test_size_mb = size_mb(data_test.data)\n",
    "\n",
    "print(u'数据类型：', type(data_train))\n",
    "print(\"%d文本数量 - %0.3fMB (训练数据集)\" % (len(data_train.data), data_train_size_mb))\n",
    "print(\"%d文本数量 - %0.3fMB (测试数据集)\" % (len(data_test.data), data_test_size_mb))\n",
    "print(u'训练集和测试集使用的%d个类别的名称：' % len(categories))\n",
    "print(categories)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "### 数据重命名\n",
    "x_train = data_train.data\n",
    "y_train = data_train.target\n",
    "x_test = data_test.data\n",
    "y_test = data_test.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " -- 前5个文本 -- \n",
      "文本1(属于类别 - alt.atheism)：\n",
      "If one is a vegan (a vegetarian taht eats no animal products at at i.e eggs, \n",
      "milk, cheese, etc., after about 3 years of a vegan diet, you need to start \n",
      "taking B12 supplements because b12 is found only in animals.) Acutally our \n",
      "bodies make B12, I think, but our bodies use up our own B12 after 2 or 3 \n",
      "years.  \n",
      "Lacto-oveo vegetarians, like myself, still get B12 through milk products \n",
      "and eggs, so we don't need supplements.\n",
      "And If anyone knows more, PLEASE post it.  I'm nearly contridicting myself \n",
      "with the mish-mash of knowledge I've gleaned.\n",
      "\n",
      "\n",
      "\n",
      "文本2(属于类别 - comp.graphics)：\n",
      "Hi,\n",
      "         I have a friend who is working on 2-d and 3-d object recognition. He is looking\n",
      "for references describing algorithms on the following subject areas:\n",
      "\n",
      "Thresholding\n",
      "Edge Segmentation\n",
      "Marr-Hildreth\n",
      "Sobel Operator\n",
      "Chain Codes\n",
      "Thinning - Skeletonising\n",
      "\n",
      "If anybody is willing to post an algorithm that they have implemented which demonstrates\n",
      "any of the above topics, it would be much appreciated.\n",
      "\n",
      "Please post all replies to my e-mail address. If requested I will post a summary to the\n",
      "newsgroup in a couple of weeks.\n",
      "\n",
      "\n",
      "Thanks in advance for all replies\n",
      "\n",
      "\n",
      "\n",
      "文本3(属于类别 - comp.graphics)：\n",
      "Hello netters\n",
      "\n",
      "Sorry, I don't know if this is the right way of doing this kind of thing,\n",
      "probably should be a CFV, but since I don't have tha ability to create a \n",
      "news group myself, I just want to start the discussion. \n",
      "\n",
      "I enjoy reading c.g very much, but I often find it difficult to sort out what\n",
      "I'm interested in. Everything from screen-drivers, graphics cards, graphics\n",
      "programming and graphics programs are discused here. What I'd like is a \n",
      "comp.graphics.programmer news group.\n",
      "What do you other think.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "文本4(属于类别 - comp.graphics)：\n",
      "\n",
      "Yes, I did punch in the wrong numbers (working too many late nites).  I\n",
      "intended on stating 640x400 is 256,000 bytes.  It's not in the bios, just my\n",
      "VESA TSR.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "文本5(属于类别 - talk.religion.misc)：\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "Well, I am not Andy, but if you had familiarized yourself with some of\n",
      "the current theories/hypotheses about abiogenesis before posting :-), you\n",
      "would be aware of the fact that none of them claims that proteins were\n",
      "assembled randomly from amino acids. It is current thinking that RNA-\n",
      "based replicators came before proteinaceous enzymes, and that proteins\n",
      "were assembled by some kind of primitive translation machinery.\n",
      "\n",
      "Now respond to 2. :-)\n",
      "--Cornelius.\n",
      "\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "### 输出前5个样本\n",
    "print (u' -- 前5个文本 -- ')\n",
    "for i in range(5):\n",
    "    print (u'文本%d(属于类别 - %s)：' % (i+1, categories[y_train[i]]))\n",
    "    print (x_train[i])\n",
    "    print ('\\n\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集样本个数：2034，特征个数：26576\n",
      "停止词:\n",
      "\n",
      "frozenset({'fill', 'almost', 'few', 'hereafter', 'should', 'side', 'amongst', 'an', 'anyhow', 'whom', 'nor', 'same', 'amoungst', 'much', 'am', 'into', 'fire', 'inc', 'indeed', 'every', 'your', 'next', 'hundred', 'elsewhere', 'interest', 'if', 'sometimes', 'show', 'it', 'although', 'formerly', 'least', 'even', 'thence', 'again', 'couldnt', 'due', 'describe', 'everything', 'this', 'other', 'whatever', 'during', 'eleven', 'detail', 'himself', 'namely', 'top', 'my', 'thick', 'our', 'such', 'through', 'yourselves', 'others', 'off', 'seeming', 'out', 'still', 'before', 'former', 'something', 'four', 'why', 'has', 'etc', 'bill', 'back', 'beyond', 'con', 'empty', 'along', 'each', 'five', 'last', 'rather', 'whoever', 'only', 'alone', 'both', 'less', 'him', 'could', 'except', 'in', 'with', 'across', 'here', 'whose', 'itself', 'she', 'around', 'someone', 'yours', 'can', 'behind', 'over', 'became', 'name', 'cry', 'seemed', 'either', 'another', 'most', 'a', 'co', 'via', 'hers', 'many', 'nobody', 'bottom', 'mine', 'thin', 'cant', 'all', 'first', 'else', 'system', 'everyone', 'found', 'upon', 'whence', 'any', 'until', 'cannot', 'whenever', 'anywhere', 'had', 'where', 'be', 'third', 'when', 'mostly', 'as', 'whither', 'will', 'enough', 'because', 'nine', 'some', 'we', 'were', 'well', 'up', 'made', 'thereupon', 'myself', 'sincere', 'forty', 'ourselves', 'thereby', 'though', 'throughout', 'wherever', 'anything', 'there', 'whether', 'ie', 'otherwise', 'after', 'two', 'front', 'un', 'without', 'them', 'thru', 'toward', 'sixty', 'while', 'becoming', 'become', 'may', 'please', 'whereupon', 'herein', 'very', 'these', 'no', 'part', 'noone', 'beforehand', 'onto', 'get', 'eg', 'its', 'however', 'latter', 'at', 'but', 'from', 'go', 'becomes', 'none', 'what', 'whereby', 'more', 'twelve', 'that', 'hence', 'among', 'for', 'been', 'by', 'me', 'nevertheless', 'afterwards', 'was', 'moreover', 'then', 'fifty', 'towards', 'nothing', 'about', 'therein', 'within', 'keep', 'which', 'three', 'the', 'nowhere', 'yet', 'never', 'seem', 'you', 'anyway', 'below', 'not', 'of', 'on', 'put', 'eight', 'done', 'neither', 'so', 'thereafter', 'they', 'his', 'those', 'twenty', 'beside', 'everywhere', 'above', 'ltd', 'whole', 'and', 'perhaps', 'between', 'hereupon', 'now', 'somewhere', 'full', 'once', 'is', 'under', 'six', 'take', 'who', 'whereafter', 'how', 'own', 'her', 'have', 'therefore', 'do', 'together', 'us', 'since', 'whereas', 'several', 'yourself', 'somehow', 'mill', 'hasnt', 'ours', 'see', 'also', 'seems', 'meanwhile', 'are', 'de', 'being', 'fifteen', 'find', 'i', 're', 'ten', 'amount', 'move', 'than', 'per', 'themselves', 'thus', 'already', 'serious', 'might', 'often', 'anyone', 'further', 'must', 'always', 'herself', 'too', 'one', 'to', 'he', 'give', 'their', 'would', 'down', 'call', 'hereby', 'sometime', 'wherein', 'ever', 'against', 'or', 'besides', 'latterly'})\n"
     ]
    }
   ],
   "source": [
    "### 文档转换为向量\n",
    "## 转换\n",
    "## max_df 只取前50%的权重\n",
    "vectorizer = TfidfVectorizer(input='content', stop_words='english', max_df=0.5, sublinear_tf=True)\n",
    "x_train = vectorizer.fit_transform(data_train.data)  # x_train是稀疏的，scipy.sparse.csr.csr_matrix\n",
    "x_test = vectorizer.transform(data_test.data)\n",
    "print (u'训练集样本个数：%d，特征个数：%d' % x_train.shape)\n",
    "print (u'停止词:\\n')\n",
    "print(vectorizer.get_stop_words())\n",
    "## 获取最终的特征属性名称\n",
    "feature_names = np.asarray(vectorizer.get_feature_names())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## 特征选择\n",
    "ch2 = SelectKBest(chi2, k=1000)\n",
    "x_train = ch2.fit_transform(x_train, y_train)\n",
    "x_test = ch2.transform(x_test)\n",
    "feature_names = [feature_names[i] for i in ch2.get_support(indices=True)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "分类器的比较：\n",
      "\n",
      "分类器： RidgeClassifier(alpha=1.0, class_weight=None, copy_X=True, fit_intercept=True,\n",
      "        max_iter=None, normalize=False, random_state=None, solver='auto',\n",
      "        tol=0.001)\n",
      "5折交叉验证的训练时间为：4.732秒/(5*10)=0.095秒\n",
      "最优超参数为： {'alpha': 0.46415888336127775}\n",
      "测试时间：0.001秒\n",
      "训练集准确率：92.63%\n",
      "测试集准确率：75.76%\n",
      "\n",
      "\n",
      "分类器： KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
      "           metric_params=None, n_jobs=1, n_neighbors=5, p=2,\n",
      "           weights='uniform')\n",
      "5折交叉验证的训练时间为：8.594秒/(5*14)=0.123秒\n",
      "最优超参数为： {'n_neighbors': 1}\n",
      "测试时间：0.077秒\n",
      "训练集准确率：96.51%\n",
      "测试集准确率：50.55%\n",
      "\n",
      "\n",
      "分类器： MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)\n",
      "5折交叉验证的训练时间为：0.208秒/(5*10)=0.004秒\n",
      "最优超参数为： {'alpha': 0.01}\n",
      "测试时间：0.000秒\n",
      "训练集准确率：91.40%\n",
      "测试集准确率：76.72%\n",
      "\n",
      "\n",
      "分类器： BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)\n",
      "5折交叉验证的训练时间为：0.283秒/(5*10)=0.006秒\n",
      "最优超参数为： {'alpha': 0.01}\n",
      "测试时间：0.001秒\n",
      "训练集准确率：88.64%\n",
      "测试集准确率：74.28%\n",
      "\n",
      "\n",
      "分类器： RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
      "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
      "            min_impurity_split=1e-07, min_samples_leaf=1,\n",
      "            min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
      "            n_estimators=200, n_jobs=1, oob_score=False, random_state=None,\n",
      "            verbose=0, warm_start=False)\n",
      "5折交叉验证的训练时间为：15.479秒/(5*6)=0.516秒\n",
      "最优超参数为： {'max_depth': 9}\n",
      "测试时间：0.078秒\n",
      "训练集准确率：75.91%\n",
      "测试集准确率：68.14%\n",
      "\n",
      "\n",
      "分类器： SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
      "  decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n",
      "  max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
      "  tol=0.001, verbose=False)\n",
      "5折交叉验证的训练时间为：25.948秒/(5*9)=0.577秒\n",
      "最优超参数为： {'C': 100.0, 'gamma': 0.031622776601683791}\n",
      "测试时间：0.169秒\n",
      "训练集准确率：93.36%\n",
      "测试集准确率：73.54%\n",
      "\n",
      "\n",
      "分类器： LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l1', random_state=None, tol=0.0001,\n",
      "     verbose=0)\n",
      "5折交叉验证的训练时间为：7.340秒/(5*3)=0.489秒\n",
      "最优超参数为： {'C': 10.0}\n",
      "测试时间：0.001秒\n",
      "训练集准确率：96.31%\n",
      "测试集准确率：72.21%\n",
      "\n",
      "\n",
      "分类器： LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0)\n",
      "5折交叉验证的训练时间为：1.205秒/(5*3)=0.080秒\n",
      "最优超参数为： {'C': 10.0}\n",
      "测试时间：0.001秒\n",
      "训练集准确率：95.48%\n",
      "测试集准确率：74.58%\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "### 使用不同的分类器对数据进行比较\n",
    "print (u'分类器的比较：\\n')\n",
    "clfs = [\n",
    "    [RidgeClassifier(), 'Ridge'],\n",
    "    [KNeighborsClassifier(), 'KNN'],\n",
    "    [MultinomialNB(), 'MultinomialNB'],\n",
    "    [BernoulliNB(), 'BernoulliNB'],\n",
    "    [RandomForestClassifier(n_estimators=200), 'RandomForest'],\n",
    "    [SVC(), 'SVM'],\n",
    "    [LinearSVC(loss='squared_hinge', penalty='l1', dual=False, tol=1e-4), 'LinearSVC-l1'],\n",
    "    [LinearSVC(loss='squared_hinge', penalty='l2', dual=False, tol=1e-4), 'LinearSVC-l2']\n",
    "]\n",
    "\n",
    "## 将训练数据保存到一个列表中\n",
    "result = []\n",
    "for clf,name in clfs:\n",
    "    # 计算算法结果\n",
    "    a = benchmark(clf,name)\n",
    "    # 追加到一个列表中，方便进行展示操作\n",
    "    result.append(a)\n",
    "    print('\\n')\n",
    "## 将列表转换为数组\n",
    "result = np.array(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "### 获取需要画图的数据\n",
    "result = [[x[i] for x in result] for i in range(5)]\n",
    "training_time, test_time, training_err, test_err, clf_names = result\n",
    "\n",
    "training_time = np.array(training_time).astype(np.float)\n",
    "test_time = np.array(test_time).astype(np.float)\n",
    "training_err = np.array(training_err).astype(np.float)\n",
    "test_err = np.array(test_err).astype(np.float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nFxdXqk5lwnCJhx9+uPIDLANhGAAAAEB1IRADAIArJjU19YrcznS5tycBACARiAEAwBWSmpqqtrfe\nquxKPL++ovztdiUlJxOKAQCXhUAMAACuCKfTqeycHK16/HG1bdq0yvpNOnFCI5YskdPpJBADAC4L\ngRgAAFxRbZs2VedWrap7GAAAlFL505QAAAAAAKgBCMQAAAAAAK9EIMYVU1hYWN1DAAAAAIALIhBf\ngyoTJN1ut3bu3KkzZ84Yr8uzc+dOjRo1SufOndOmTZt09OjRSx7nr7/+quDgYH399del3vvtt9/U\nunVrffLJJ5KkoqIiZWdnq6Cg4JKvBwAAAABVqUYdqnWlnnVYWZfzbMRXX31VH330kT788EO1atVK\nCQkJpeq0adNGrc47nOSOO+7Qxo0b1adPH40dO1Y2m01vvPFGmf1nZ2frvffe0xtvvKHXX39dP/30\nk3bu3KmAgABJUkZGhhGuS1itVjVp0qRUX2azWceOHZPL5Sr1XqNGjTRgwACNHj1a//nPf/Tzzz/r\n7rvvlslkKjO016tXT6dPny73swEAAACAqlRjAvGVfNZhZV3OsxGHDBmitWvX6vbbb9fOnTvVv39/\nderUSTabTZKUmJiouXPnasyYMcrOzlaDBg3k4+Mjq9UqSRo5cqT69eunkJAQjR8/vlT/vr6+kiSL\nxaIPP/xQHTt21PLlyzVp0iRJ0htvvKEZM2bIZDJJKl5xDgsL0549e0r1ZbFYPP5Z4uzZs3K5XIqO\njlZ6erqOHTumbt266fDhw7LZbLLZbEb/krRixQpFRUVV+rMCAAAAgMtRYwKx8azDP/1JbQMDq20c\nSU6nRqxbd8nPRmzRooW2bdumdevW6aabbpLZbFZcXJxatGghSerVq5d8fX313nvvadGiRfrhhx88\n2t91111atmyZNm3apPT0dOXm5srPz09mc/Hu+JIty2fOnJG/v7/Wr1+vG2+80WhvsVgUEhKigwcP\nSpIiIyO1efNmHTt2TL/99pt8fX1lsVhkNpuVkZEhSTp8+LCsVqtCQkJUv359jR8/XomJidq5c6dW\nr15t9B0cHFzmnGvVqmUEegAAAAC4WmpMIC7RNjBQnZs2re5hXLL8/HxZrVY98sgjkoq3JbvdbvXp\n00dPPvmkUc9qtRqrxr83bNgwDRs2TFOmTFF0dLTHaqxUvOpbErAlqWPHjsYKcMkK8vksFouWLVum\n1157TVarVWaz2QjYJpNJEyZMUGFhoT788EOFh4erbt26stvtxrUyMzPLHKe/v3+Z1wMAAACAq4FD\nta4hOTk5+sMf/qCYmJhS76WkpBgrspJKhVxJ+uKLL7RixQrFxsZq//79mjt3rnJycuRyuYyfknus\nk5OT5XK5lJeXp+3btxt9lATd85nNZs2ePVvnzp1Tenq60tLSdOrUKR06dEhut1uff/65zp49q/Dw\ncEnFobqkn19//VUBAQGqX7++8RMQEKCAgAAtX7788j4wAAAAADXG/v371a1bNzVo0EDPPPNMhdo4\nHA5jwc7Hx0f9+vWr1DUJxNcQu92uWbNmKTIyUv/v//0/j/csFovq1KlTbvuvvvpKS5YsUUREhP75\nz3/K19dXRUVFysvLkyTl5eWpdu3astvtOnHihNGvn5+f0YfJZNKhQ4fk4+Mjs9msefPmedxPXNap\n1OWdbG2322UymbR//34jlBcVFal169Ye1wUAAADgvfLz8+VwONS1a1ft2rVLBw4cUGxs7EXb7d69\nW4mJiTpz5ozS09O1fv36Sl2XQHyNGTZsmOLi4tS/f/9S710sQM6YMUPbt29XWFiYcU/uU089Jbvd\nLrPZLH9/f61cuVLNmzdXSkpKmX2YzWa1atVKKSkpSklJ0dixY41AHBkZqT/+8Y8qKiqq8HxKTpXO\nyMgwfs6cOaOioqIyV7kBAAAAeJ/4+HhlZmYqOjpawcHBmjNnjpYtW1Zum5JFvrZt26pu3boet25W\nFIH4GnTvvfeqW7dukmSET6fTqRtuuMGjrDwlJz/PmTNHmzZtMlZpH3roId1yyy1KTEwss11RUZEs\nFotatGihoKAg45qS9MQTT+j48eN67733Kj2nHj16eGybvlAgBwAAAOB99u7dq+7duxuLgKGhoTpw\n4EC5bb799lsVFhaqRYsWql27toYOHepxm2lFEIivQenp6br55pu1fft2ud1u5ebmKj09XU3/97Cw\nki3QFdG0aVO1bNlSktS6dWvVq1dPXbp08bhv+HxlPVO4ZEt0cHCwBgwYoJdeeqmyUyq1Zfqmm26q\ndB8AAAAAaqbMzMxST6WxWCzlBtzk5GSFhYXp888/186dO3X06FFFRkZW6rrXZCB+++23S5UNGTJE\ncXFx1TCaqy82NlYFBQW69dZbNXv2bCUlJclsNqtZs2aaNGmSevXqJZfLpfz8/HL7cblcOnfuXKny\n2267TXv27DEewXS+oqIiFRYW6tixY8ZBXuevSE+ePFmLFi2q8FxKwnRZq9rl3Xt8vdi3b58cDodx\nWFmJGTNmaN68eR5lqampcjgcSk5O9ihfsGCBpkyZ4lGWnZ0th8Ohbdu2eZSvXr1ao0ePLjWOsv5+\nbNy4UQ6Ho1TdcePG6Z133vEo27NnD/NgHsyDeVT5PGbOnFl6HosXK273bs957N8vRxkHSo5buVLv\nbN3qOY+UFE384INSdfk+qnYeEydOLD2PC3wfjpgYObOyPOfxj39o3mefec4jLU2OmBgdPXXqqs2j\npnwfzIN5XI/zWL16tRwOhxwOhzp06KCQkBBFR0eXumYJi8VS6ik6NptN2dnZF2wzbdo0/etf/1L7\n9u31hz/8Qa+88orWrl17wfplMbmvoVTy/vvva8SIEVq1apWGDx9eZp09e/aoS5cu2r17tzp37ly6\n/PHHq/WxS3tOnFCXJUtKja8y2rdvr/DwcL388suSiu/d/fe//63Jkyere/fuatiwod58800tXLhQ\niYmJ8vX11ebNm9WzZ09Jxc8qfuCBB/T111/rlltu0eOPP65bbrlFOTk5KioqUk5Ojho1aqRPP/1U\n9957r06ePKmGDRtKkl566SU9++yzHgdpde3aVTt37iw1zoyMDAUEBGjbtm268847jfIpU6Zo9+7d\n2rJli3799Vc1a9bM6KuEyWTS4sWL9cQTT+jtt9/WnDlzlJqaekmf19VU8ufs+eefV/369fXoo4+q\nfv361T0sALgmGf9vnjlTnVu1qrp+U1LUZebMy/p/Lcp3pb47ie8P8Gbl5b2oqCglJiZ6HKQVEBCg\nQ4cOqUGDBhXq/8cff1S7du2Um5tb4ce71rjnECf97jcX19v14+LidPjwYU2YMEGSlJWVpaVLl2rK\nlCmKiIhQixYt9OWXX+rJJ5/0eC7x+Vwul2bNmqWGDRvq5ZdfVmJiotxut+6//34VFRVpy5Yt6tu3\nr1asWKE+ffro9ttv1z/+8Q+FhYXJ5XIpJCREBw8elFT8m5+NGzdWag4ul8sIv40aNVJ6enqZ9fz9\n/SXVjJViAAAAAJeua9euWrp0qfH66NGjys/PL3fx6c9//rOefvpp9ejRQ5K0fft2NWrUqMJhWKpB\ngTgwMFD+drtGrFtX3UORv92uwMDASrfLzc3VtGnTNHjwYDVp0kSSNHfuXPn4+GjcuHHq16+f7rzz\n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\n810us2fPHg0fPtz+ePDgwZo7d67blYNnmmI4qMSQULQdBCrUhaH0AOAZjputWxGvKT0AABk4SURB\nVEvtP1/lTbcD8YkTJxQTE+O4cECAjh8/ri5dutS7zNVXX21/HBQUpLKysnrXYbPZJElbt251q04l\nJSWSpNzXslR8Wa5by7jju3yLJOlfWqEgee9q0mHtkSRl5uaqwMXr4KldFotMUpMMB5WkwHbttPjZ\nZxUWFua1Mltb30lN139bv/rqXLlffaUCq9Vr5Zb88MO5cjMzvXrga6q+k1rfvlfyf/21YsUKRXjx\nynOtrl27Kjg42Ktlsu/9pCmPna3puCm1vn2vqY6bUus7dra2vpM4752vtfVfaztuSux752sJ/Veb\n806cOOH0XHPkzTrVuGnOnDk1M2fOdJjWo0ePmrKysnqXue+++2qWLl1qf3zmzJma9u3b1zv/9OnT\nayTxxx9//PHHH3/88ccff/zx10b/pk+f7pO8WRe3rxCHhIRo7969DtNsNpvat2/vcpmjR4+6Pf/D\nDz8sSerXr5+CgoLcrRoAAAAAoIWz2WzKzc21577zNUferIvbgXjQoEFavny5/XFJSYmqqqoUEhLi\ncpk1a9bYH+fk5Kh79+71zt+3b1+98MIL7lYJAAAAANAGNEferIufuzMOHTpUNptNaWlpkqRFixZp\nxIgRMplMstlsqq6udlrGbDZr27Zt+vjjj3X69Gk9++yzGj16tEcVBAAAAAC0bb7Km6aampoad2fe\nsGGD7r//fnXs2FH+/v7KyspS3759FRMTo+eff15ms9lpmdTUVM2YMUOXXnqpgoOD9fnnn6tbt24e\nVRIAAAAA0Lb5Im96FIgl6bvvvlN2drbi4+PdvvvpwYMHVVhYqCFDhuiSSy7xZHUAAAAAAINo7rzp\n9pDpWuHh4RozZoxHPwUSFRWl0aNHt/ownJaWJj8/P/n7+6tTp04aOnSodu/ebX/+4MGD8vf3d1nG\nwYMH5efn8cuOJpaWlqbrr7/e/jg5OVmXX365xowZo6ioKNV+bpSVlWXvv2HDhukXv/iFQxkX3iq+\nrVq4cKH8/Py0adMmSdILL7wgPz8/rVq16qLLNnQfcGf/8qaGrq+u9i1cuFCXXnqp/ScGauexWCx6\n6qmn7MeVSy+9VLfeeqsOHDjglTY0xPnHuQ4dOujnP/+5du7c6bP6uJKWlubw24OePHfLLbc4THO1\nPw8bNsz+mnTr1k0TJ05UZWWll1rROBc7LzWWN85Z59fR39/f/v+PP/7YS7VEQ23fvl033HCDgoKC\nNGrUKJWVlSk6OtrhO3zSud8XzcjI0KRJk+Tn52e/6c3s2bPl5+enTz/91BfV96kL3zdcKCsrSz17\n9mzGGtXt73//u6Kjo9WtWzdNmzZN1dXVKi0tlZ+fn776v5+/ks79lqufn5+OHDkiSfrwww8VGxur\nkJAQTZs2TVVVVW6vc9KkSfrDH/5Q53N//vOfNWnSpMY1qpHou/rV1XcnT57Ur371K3Xq1Eldu3bV\n/PnzvdNAF5o7b5LMPNSvXz+Vl5crPz9fffr00V133aUzZ85IOtcRP/zfb+C5YjKZmrqaaIDaftm9\ne7fmz5+v1atX6/LLL9fXX3+tt99+22k+k8mk7du3a8+ePU7PtXUmk0kmk8n+Y+n5+fketb2+eYcP\nH15vqHZ3//KWxqzvwvaZTCZVVlbq5ZdfrnOesWPHqry8XMXFxerdu7cmT57csEp7Se1x7ptvvtEv\nf/lL3XPPPT6tjyuutrv6npswYYI2btzoNG99+7PJZNKf/vQn/fDDD9q+fbsKCgq0ePFiL9TeO1yd\nl7zBG8e12jr+8MMP9n+HDRvW+Mo1AB9Mn1NZWak777xTSUlJKigoUOfOnTVjxgyNGjXKIeB++eWX\nKi8v14gRIySpUcf+tsZV24cMGaLcXO/+ZrGnvvjiC82aNUuvv/66Pv30U23evFkvvfSSoqOj1atX\nL4d+3rJli/r166fLLrtMBw8e1F133aWZM2cqOztb+fn5WrRoUaPr88orr2jevHktYpuh79z36KOP\n6tSpUyooKND69euVnJysjz76qLFNbFE4I3jI399fnTt3VlRUlJYuXapDhw6pqKjI/jw/F9W6VVZW\n6j//8z/18MMP20/+/v7++tvf/lbn/P7+/lq6dGlzVrHFOP8qQV5eXrNcvW3u/cub6/Pz86v3Lvrt\n2rVT586dFR4erokTJyonJ8dr622I2uNcaGiopk6dKovFomPHjvm0Tt4UEBBQ5yfIrvbnjh07Kigo\nSL169dKdd96p7Ozspq6m2y52XmoJausYFBRk//NVKK2pqWkRb8h9raCgQMePH9evf/1rde/eXfPn\nz9fZs2c1cuRIpzfb1113nUJDQyWd68vaY//evXubdeROa+Ln56dLL73Up3XYsmWLbrjhBg0ePFhx\ncXF64okn7MfyC/v5008/1ciRIyVJK1as0LBhw/Sb3/xGMTExmjlzptauXduoumRlZelvf/ubHnzw\nwUaV0xzou5/U1NSourpa6enpioyM1LBhwzR48GDt2rWrcQ1sYQjEjRAYGCg/Pz9VVFRIqv9T540b\nN6pPnz4KDw93uvr15Zdfql+/fgoLC9Njjz2muLg4/e///q8k6d1331X//v0VHBys3/zmNzp9+nTT\nN8rAampq9NhjjykoKEj/8z//Y58+duxYffrppyosLHRaxmw267XXXlN5eXlzVrVFuOGGG+xvigoL\nCzVw4EDV1NQ4DRuvHRrsyvTp0+3D7iZOnCh/f3/99re/dZinrv0rKytLMTEx2rBhg6KjoxUaGmrf\nf6RzQX3IkCHq2rWrbr/9dpWVlUk6dyV68uTJCg8P14QJEzR58mQFBQU5XDWsb3/eunWrBgwYoE6d\nOik+Pr7O7aIuw4YN09GjR/Xuu+/WO8/Zs2f15ptv6tprr3WrzObw+uuv64orrlBISIjLY1JMTIw+\n+ugjzZs3TxERESooKJAkPfXUU5o0aZL++Mc/Kjg4WL169dLnn39uX+7NN99UbGyswsPDNWPGDPvQ\nrtrlatX2tTfUN5zanf3ZZrPp3XffbVF9dL727dvbz0v1basX229cnbMas0/V59NPP9X111+v0NBQ\nJSQk6Pjx4/bnhg8frrS0ND333HOKjo522H9cbY9/+ctf1L17dwUFBWn8+PH27apjx47q1auXJNmH\nbv/rX//y9GVuE3r06CE/Pz89/fTTOnPmjK677jqtW7dOt9xyi7755hsdPHhQ0rk35rVvtqWfjv3/\n/ve/VVVVpSuuuMJXTWjR6jpm1R57VqxYocsvv1w/+9nPtH79evvzrrbp5cuXKyoqSl26dNE999xj\nf+8p1X/8vfLKK/XZZ58pMzNTkvTAAw9owYIFkpxD1ZYtWzRq1ChJ0ueff64bb7zR/tz111+vMWPG\nNOr1iI2N1eeff66f/exnjSqnOdB3PzGZTHr55ZftHxCcPXtWRUVF6tOnT4PLbIkIxI3w17/+VUFB\nQYqNjbVPu/BT5++++07jx4/XvHnztH37dqc3Bw899JAmTJigzZs3a+XKlfr73/+uhIQEHThwQHfe\neaceffRR7dy5U1988YWeffbZZmmXUe3fv1+pqamS5PCJd0xMjMaNG1fnlaOhQ4eqb9++Tt+3MoI+\nffqotLRUhw8fVteuXdWxY0dJdQ8XvpiUlBSVl5frxhtv1AsvvKAffvhBf/nLX5zmq6usY8eOacmS\nJfrnP/+pP/zhD5o5c6aqqqp08uRJjR49WqNHj9aXX36pK664QnfccYf9++ClpaVKS0vT2rVrdcMN\nN+jee+/Vhg0bXK6vpqZG9957r+655x6VlJRoyJAhevzxxy/aPknq3LmzJk+eXOdog40bNyokJESX\nXnqpXnnlFYeh1b6Qm5trr8+8efOUnp6u4uLiix6T5s+fr7KyMq1Zs0bR0dH26ZmZmSopKdHu3bt1\n4403at68eZLODQmbOHGinn32WX322WfauXOn5s6da1+uIduSu+oqy9X+PHfuXAUHBys0NFT//ve/\nm+U7VA2xdOlS+3nJ1bZa335z5MiRes9Zjdmnarep4OBghYSE2D9M+/rrrzV27FjNmDFD2dnZstls\nmjhxokObli1bpo8++kjLly/Xz3/+c0lSUVFRvdvjvn37NHv2bL3++uvatWuXDhw4YP8Jj++++87+\nHevjx4/rhx9+0KBBg5qgJ1q+bt266dVXX9Wf//xn9enTR6tXr5YkhYaG6rrrrrO/4T7/zbZ0bvj7\n3r17tXfvXvXr188ndW8t6jrO5OXlad26ddq2bZsmTpyoRx55RJLrbTo/P1+JiYl6+eWXlZ+fL6vV\n6jTiqK7j7+23366kpCTdcccdGjJkiHbs2GGfv/aDj0OHDmn//v0qLy/XkCFDJEllZWUKDw+3zxsV\nFaWUlBTt2LHDvg8HBwfb/yIjIy/6Wlx22WVq166dZy+gD9F3dUtLS1NAQIB++ctferRcS0cg9lDt\nSb1Tp05avHixXn31VXsQqMu7776rnj17avLkyerZs6cWLlzo8Pzu3bt1zz33qF+/frr66qt18OBB\ndenSRRkZGbr++us1adIk9erVS9OnT3f4Hiu878cff9Szzz6r3Nxc+82ias2YMUOvvvqq/aZI50tK\nStKLL76os2fPNldVWwR/f3/7Vab+/fvXO587N7IPDAxUUFCQfShrUFCQAgMD3arHyZMn9dJLLyku\nLk5Tp07V6dOndeTIEW3YsEFBQUH6/e9/rx49euj555/X/v377VeDxo8fr6uuukomk0lTpkxRZGSk\nW6Mwdu/erccff1wWi0Xl5eXat2+fW/WUpMTERH3wwQdON8265ZZbtGfPHm3fvl233nqrz284Ehsb\nqz179mjnzp168MEHNXnyZLeOScHBwUpLS9OwYcMcjovt2rVTamqqoqKi9Otf/1qHDh2SJK1cuVIJ\nCQkaN26crrzySiUnJ9s/lPKV+vbn2bNna8+ePfrwww9VXV3tdCz3pfrOS6621fr2m/fee6/ec9Y7\n77zT4H2qdpvas2ePdu/erb59+0qSVq9erV/84heaPHmyoqOj9eKLL+rtt9/Wd99951DXt99+WyNH\njrTfYOX111+vd3sMDAyUyWTSqVOnFB0drR07dtiHadYO2z7//0YePn333XfLYrFo4sSJmjZtmubM\nmSNJGjVqlLKysnTgwAGVl5c73HAuIiJC5eXl2rVrl8tjP+pWUVGhVatW2fez2uOhq2Nsr1699O23\n39pHepw+fdrp3FPf8XfRokXav3+/oqOjdfPNN+udd96RJHXp0kWDBg1SVlaWtmzZohtvvNG+3OnT\np+scCj9gwAD7Ply7P+/Zs0fbtm1rkteqpTF63x0+fFizZs3Sc88916o+3HBHgK8r0NrExsYqMzNT\nzz33nHJyci46DOHw4cMOn77UDtWq1bt3b33++ecKCQnRV199pauuukrSuU/Nc3Jy7Cf/M2fOqHPn\nzl5uDc531VVX6bHHHlNJSYkWLFigsWPH2p8bNmyYYmJi9MorrzgtN378eM2aNcutoYFticlkUv/+\n/fX6669r+PDhdd5goTnuxBscHKyrr75akuwH6JqaGh06dMhhyFNgYKAiIiLsJ7AOHTrYn2vfvr1b\n6zKZTEpOTtbLL7+sXr16qUePHh7dvKhnz5667bbbHIanStIll1yiHj16qEePHnrppZcUFham3Nxc\nn73ZbN++vXr06CHp3BXHLl26KD09XQcOHHB5TPrv//7vOsuLj49XQECAvezaD0kOHTqkm2++2T5f\nr169VFlZKavV6lTG+UPMmlJ9+3NISIgiIyMVGRmpBQsWaMqUKfrTn/7ULHW6mPrOS6621fr2G1fn\nrK+//rrB+9T529T5Dh065HA314iICAUGBspisdivcjz00EP27ef8utR3joyOjtayZcs0d+5cHThw\nQLfddpuef/55hYWFuX4hDebw4cOqrKxUz5499eSTT+rmm2/WLbfcohkzZmjkyJGaOnWqbrrpJg0Z\nMsSpP+Pi4vSPf/xDDzzwgN544w0ftaB1iouLs38f+/zX9Ztvvql3m66srNSDDz6orVu36tprr1VA\nQIDTuaeu4+/+/fsVHBysmJgYvfrqq+rdu7dmzpxp/x3XESNGKCsrS6dPn3YYBdC1a1eHr45kZ2fr\n5ptv1r///W+Pryi2JUbuu5qaGv3Xf/2X7rjjDt19990NLqel4gqxh9q3b6/IyEjNnz9fe/bsuejP\nRoSHh9u/YyXJ/p2cWldddZWSkpIUERGhiRMn2ocfXXHFFTKbzcrNzbV/ivP+++97v0Gwq31TOG/e\nPOXn52vdunUOzyclJdk/nTtfYGCgpk2bVudzbV2/fv20efNm9e/fXzU1NTp48KDDlbWdO3d6dPXF\nz8/PrSvK56vvxleRkZEqKSmxPz516pTKysoUFRXlUfnny8rK0sqVK1VYWKjt27c36G7Q9W1HtWpP\nlN68S3Bj1NTUqKamxn4l19UxqVOnTnWW4aqPiouL7Y8PHDigjh07KiwsTCaTyWlbag7u7M9nzpxp\nMf0j1X1euti2Wl+fuDpnNcU+deE2UFZWpqqqKoch93VtV67OkYcPH9bAgQP1r3/9S6WlpTp69KjD\nfSG4w/Q5GRkZmjJliv3x0KFDFRAQYL8ifPjwYa1Zs8bh+8PSTx+Gfvzxxy32u/QtWX37nqtt+vnn\nn5fNZtO3336rDz74QPHx8U7L17WfzJ49Wy+++KL98a233urw6wkjR47UJ5984vQ98euuu87hmFtU\nVKSIiAjPG9vGGLnv5syZU+dw77aCs0IDhYaG6uGHH3YaNnfhm/lRo0apsLBQr776qoqLi/XUU0/Z\nn9u3b5+2bNmirVu3qqioyOH7eOPHj9eWLVu0b98+tWvXTs8//7zPh1EaRUREhKZMmaKFCxc69OeE\nCRPUtWvXOpeZPn26IYfd1V7BrP23e/fuOnz4sA4dOqSKiop6h5XWF3p79eqljz/+WN9++60++ugj\np/ncCcu189x+++2y2Wz64x//KIvFoqSkJPXt29fp+4KuyrzwOZvNJpPJpO+//15bt27VY489Vufy\nrsq89dZb7cNFa1VVVen48eMqLi7WrFmzFBISYr965wvV1dU6fvy4Dh06pN/97neqqqrSsGHDvH5M\nmjJlitLT0/XOO+9o3759mjlzph566CFJ57al7OxsVVdXq6ioqFmHUte1P1dUVNiHiT777LMaOnRo\ns9XHXeefl9zdVmvVPufqnOWNfepCEyZM0LZt27Ry5UqVlJTot7/9re66666LXs11dY7My8vTqFGj\ntG3bNvsNuqqrq+3L/uxnP9Mll1yijRs3ymKxOHw3z0hGjBihzz//XBkZGSorK9OCBQsUERGh2NhY\ntW/fXkOGDNFHH33kFIilc8f8du3aKS4uzgc1bzmqqqr0zTffOPydv625o3Z/cbVN22w2nT17VkeO\nHNGaNWv04osvurWfjR49WitXrtSOHTtUUlKiZ555Rrfddpv9+fj4eB05ckQnTpzQgAED7NOnTZum\nt956S6+99poKCwv1zDPP6N577/WoXS0dfee+VatWKTU1Va+++qqqq6t18uRJj37buDUgEDfC448/\nrvz8fIerxBe+ierevbvS09O1cOFCDRkyRDfddJP9uSuvvFLh4eG6+eab1bNnT3Xq1EnTp0+XdG5o\n5apVq/TYY4/pyiuvVF5eXqNveQ/3zZ07V1999ZXefPNN+7QOHTroN7/5jcNvk9aKiIjQPffcY7hQ\nfO211yooKEhRUVEymUxq166dHn74Yd14440aOnSo/YYTF6rvdfr973+voqIiRUVFafr06U7f43Tn\n9a2dp1OnTnrvvff03nvvqX///g6/J31+OZ78ju1tt92m0aNHa+DAgfrtb3+rqVOnqqysTEePHvWo\nnklJSQ6P//nPfyokJETXXnutSktLtWnTJreHcTeFvXv3KiQkRH379tWHH36odevW6f/9v//n8pjU\nkG1/4MCBSktL0+zZszVkyBANGjTI/nuJ999/v7p3767Y2Fg9+OCDevLJJ73WvrpcbH9+4oknFBoa\nqlGjRql3794+/65zfWrPSx07dtRtt92mAQMGuNxWa9W21dU5yxv71IWuuOIKbdq0SX/72980cOBA\nXXrppfX+Xvf5XJ0jR44cqYceekj33nuvYmNjZTKZ9Pvf/96+bEBAgFJTUzVt2jTFxsYacnSPJF1z\nzTX6+9//rieffFKxsbHKysrS22+/bR+ePnLkSF122WUON86q7Y9rr71Wffv2VUBAgOHOe+crKCiw\nf5WiR48eioyM9Pj3a2tfP1fb9COPPKIff/xRffv2VVpamqZMmWK/Odz5ZVxo2rRpmjBhgu666y7d\ncMMN6tq1q/7617/anw8ICNDw4cPtPzNZ64YbbtDq1av1xBNP6Be/+IVuvPFG+x2OPWlTS0bfuW7T\n+VJSUmSz2XTdddfZfzav9sPrtsJU4+n4RHjNyy+/rDfeeEMrVqxQx44dlZubq7Fjx+rIkSM+//0z\nAAAAAGjruKmWDw0fPlxr1qzR1VdfrcrKSkVHR2vx4sWEYQAAAABoBlwhBgAAAAAYEt8hBgAAAAAY\nEoEYAAAAAGBIBGIAAAAAgCERiAEAAAAAhkQgBgAAAAAYEoEYAAAAAGBIBGIAAAAAgCERiAEAAAAA\nhkQgBgAAAAAY0v8HYbW+Yj80ktUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa2eefd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 画图\n",
    "x = np.arange(len(training_time))\n",
    "plt.figure(figsize=(10, 7), facecolor='w')\n",
    "ax = plt.axes()\n",
    "b0 = ax.bar(x+0.1, training_err, width=0.2, color='#77E0A0')\n",
    "b1 = ax.bar(x+0.3, test_err, width=0.2, color='#8800FF')\n",
    "ax2 = ax.twinx()\n",
    "b2 = ax2.bar(x+0.5, training_time, width=0.2, color='#FFA0A0')\n",
    "b3 = ax2.bar(x+0.7, test_time, width=0.2, color='#FF8080')\n",
    "plt.xticks(x+0.5, clf_names)\n",
    "plt.legend([b0[0], b1[0], b2[0], b3[0]], (u'训练集错误率', u'测试集错误率', u'训练时间', u'测试时间'), loc='upper left', shadow=True)\n",
    "plt.title(u'新闻组文本数据分类及不同分类器效果比较', fontsize=18)\n",
    "plt.xlabel(u'分类器名称')\n",
    "plt.grid(True)\n",
    "plt.tight_layout(2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
